package com.micro.school.order.service.impl;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.micro.school.common.core.context.SecurityContextHolder;
import com.micro.school.common.core.web.domain.AjaxResult;
import com.micro.school.common.security.utils.SecurityUtils;
import com.micro.school.order.entity.PayFeeItemConfig;
import com.micro.school.order.entity.PayOrderImportRecord;
import com.micro.school.order.entity.PayStandardFeeItemDetail;
import com.micro.school.order.entity.PayStudentFeeItem;
import com.micro.school.order.mapper.*;
import com.micro.school.order.service.IPayFeeItemConfigService;
import com.micro.school.order.vo.PayStandardFeeItemVo;
import com.micro.school.system.api.domain.vo.PayFeeItemConfigVos;
import com.micro.school.system.api.domain.vo.PayStudentFeeItemVos;
import com.micro.school.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 收费项目配置Service业务层处理
 * 
 * @author lyb
 * @date 2025-08-14
 */
@Service
public class PayFeeItemConfigServiceImpl implements IPayFeeItemConfigService
{
    @Autowired
    private PayFeeItemConfigMapper payFeeItemConfigMapper;


    @Autowired
    private PayStudentFeeItemMapper payStudentFeeItemMapper;


    @Autowired
    private PayOrderImportRecordMapper payOrderImportRecordMapper;

    @Autowired
    private PayStandardFeeItemDetailMapper payStandardFeeItemDetailMapper;

    @Autowired
    private PayStandardFeeItemMapper payStandardFeeItemMapper;

    /**
     * 查询收费项目配置
     * 
     * @param id 收费项目配置主键
     * @return 收费项目配置
     */
    @Override
    public PayFeeItemConfig selectPayFeeItemConfigById(Long id)
    {
        return payFeeItemConfigMapper.selectPayFeeItemConfigById(id);
    }

    /**
     * 查询收费项目配置列表
     * 
     * @param payFeeItemConfig 收费项目配置
     * @return 收费项目配置
     */
    @Override
    public List<PayFeeItemConfig> selectPayFeeItemConfigList(PayFeeItemConfig payFeeItemConfig)
    {
        return payFeeItemConfigMapper.selectPayFeeItemConfigList(payFeeItemConfig);
    }

    /**
     * 新增收费项目配置
     * 
     * @param payFeeItemConfig 收费项目配置
     * @return 结果
     */
    @Override
    public int insertPayFeeItemConfig(PayFeeItemConfig payFeeItemConfig)
    {
        int i = payFeeItemConfigMapper.insertPayFeeItemConfig(payFeeItemConfig);
        List<PayStandardFeeItemVo> payStandardFeeItemVos = payStandardFeeItemMapper.selectAllPayStandard();
        if (payStandardFeeItemVos != null && payStandardFeeItemVos.size() > 0){
            for(PayStandardFeeItemVo payStandardFeeItemVo:payStandardFeeItemVos){
                PayStandardFeeItemDetail payStandardFeeItemDetail = new PayStandardFeeItemDetail();
                payStandardFeeItemDetail.setFeeItemId(payStandardFeeItemVo.getId());
                payStandardFeeItemDetail.setFeeItemConfigId(Long.valueOf(payFeeItemConfig.getId()));
                payStandardFeeItemDetail.setFeeItemConfigName(payFeeItemConfig.getItemName());
                payStandardFeeItemDetail.setItemPrice(BigDecimal.ZERO);
                payStandardFeeItemDetail.setOrderNum(Math.toIntExact(payFeeItemConfig.getOrderNum()));
                payStandardFeeItemDetailMapper.insertPayStandardFeeItemDetail(payStandardFeeItemDetail);
            }
        }
        return i;
    }

    /**
     * 修改收费项目配置
     * PayStudentFeeItemVos
     * @param payFeeItemConfig 收费项目配置
     * @return 结果
     */
    @Override
    public int updatePayFeeItemConfig(PayFeeItemConfig payFeeItemConfig)
    {
        payStudentFeeItemMapper.updateByItemConfigId(payFeeItemConfig);
        payStandardFeeItemDetailMapper.updateByItemConfigId(payFeeItemConfig);
        return payFeeItemConfigMapper.updatePayFeeItemConfig(payFeeItemConfig);
    }

    /**
     * key=id value=name
     * Map<Integer,name>
     */
    public Map<Long,PayFeeItemConfig> queryToMap(Integer tenantId){
        PayFeeItemConfig query = new PayFeeItemConfig();
        query.setTenantId(tenantId);
        List<PayFeeItemConfig> itemConfigs = selectPayFeeItemConfigList(query);
        Map<Long,PayFeeItemConfig> result = new HashMap<>();
        for(PayFeeItemConfig config:itemConfigs){
            result.put(config.getId().longValue(),config);
        }
        return result;
    }

    @Override
    public PayFeeItemConfigVos selectMerchantByConfigId(PayFeeItemConfigVos payFeeItemConfigVos) {
        return payFeeItemConfigMapper.selectMerchantByConfigIds(payFeeItemConfigVos);
    }

    /**
     * 批量删除收费项目配置
     * 
     * @param ids 需要删除的收费项目配置主键
     * @return 结果
     */
    @Override
    public int deletePayFeeItemConfigByIds(Long[] ids)
    {
        return payFeeItemConfigMapper.deletePayFeeItemConfigByIds(ids);
    }

    /**
     * 删除收费项目配置信息
     * 
     * @param id 收费项目配置主键
     * @return 结果
     */
    @Override
    public int deletePayFeeItemConfigById(Long id)
    {
        return payFeeItemConfigMapper.deletePayFeeItemConfigById(id);
    }
}
